---
title: Usage-based pricing
description: Learn how Expo applies usage-based billing for customers who exceed their plan quotas and how to monitor your EAS Build usage.
---

import { ContentSpotlight } from '~/ui/components/ContentSpotlight';

Expo applies usage-based billing for customers who exceed their [plan](/billing/plans/) allowances. This enables our customers to use what they need without worrying about limitations or requiring contractual obligations.

Usage-based billing is enabled for EAS Build and EAS Update and is billed monthly. We provide an estimate of your existing usage and any overage charges on your [account's Billing](https://expo.dev/settings/billing).

## How usage-based pricing works

### EAS Build

For EAS Build, a flat fee is charged for an individual build executed at higher-priority levels. This is totaled monthly and charged at the end of your billing period or sooner if you cancel your plan.

> **Note**: Builds that are canceled before any work is done are not charged.

[Starter, Production, Enterprise, and Legacy plans](/billing/plans/#plans) subscribers receive credits for EAS Build. These credits can be used to offset the cost of builds. They are reset at the start of the billing period and expire at the end of that billing period. Visit our [pricing page](https://expo.dev/pricing) for more information on the pricing schedule for supported build platforms and the available resource classes.

#### Example: EAS Build credit usage

Consider an account subscribed to the Production plan that has 15 medium Android builds, and 10 large iOS builds in a billing period:

| Description             | Price | Quantity |  Total |
| ----------------------- | ----: | -------: | -----: |
| Android builds (medium) |    $1 |       15 |    $15 |
| iOS builds (large)      |    $4 |       10 |    $40 |
| EAS Build Credit        |       |          |   -$55 |
| **Total (USD)**         |       |          | **$0** |

Since the credit is included in the Production plan, the subscriber pays $0 for their 25 builds.

#### Example: EAS Build credit exceeded

Consider another example where the credit limit is exceeded:

| Description             | Price | Quantity |   Total |
| ----------------------- | ----: | -------: | ------: |
| Android builds (medium) |    $1 |       20 |     $20 |
| Android builds (large)  |    $2 |       10 |     $20 |
| iOS builds (medium)     |    $2 |       30 |     $60 |
| iOS builds (large)      |    $4 |       40 |    $160 |
| EAS Build Credit        |       |          |   -$225 |
| **Total (USD)**         |       |          | **$35** |

In this scenario, the subscriber pays $35 for 100 builds instead of $260 because the EAS Build Credit covers $225.

### EAS Update

> **info** **Tip:** Use the [pricing calculator](https://expo.dev/pricing#update) to estimate your EAS Update usage.

Usage-based pricing for EAS Update comprises two metrics: monthly active users and global edge bandwidth.

The "updated users" reflect the number of unique users who download at least one update in a billing period, also known as "monthly active users" (MAU). Global edge bandwidth represents the total amount of bandwidth used beyond your subscription plan's base bandwidth allocation. If your monthly active users exceed your plan's base MAU allocation, 40 MiB of global edge bandwidth is included for each additional user.

> **Note**: A monthly active user counts only once per billing period, regardless of how many updates this user downloads. In the context of EAS Update, a "user" is considered a unique installation of your app on a device.

Each plan has a number of monthly active users and global edge bandwidth included as part of the subscription. These differ for each plan and the most updated numbers. See our [pricing page](https://expo.dev/pricing), for more information.

#### Example: EAS Update usage

Consider a subscriber to the Starter plan who deploys 20 updates of 5 MiB each via EAS Update to 10,000 users. The subscription to the plan includes 3,000 monthly active users and 100 GiB per month. As a result, the subscriber's bill for extra usage will be:

| Description           | Price           | Quantity   |      Total |
| --------------------- | --------------- | ---------- | ---------: |
| Updated users         | $0.005 per user | 7,000      |        $35 |
| Global edge bandwidth | $0.10 per GiB   | 603.13 GiB |     $60.31 |
| **Total (USD)**       |                 |            | **$95.31** |

Out of the 10,000 users, 3,000 are included in the Starter plan. As a result, 7,000 are billed for as part of usage-based billing. Paying for 7,000 updated users also includes approximately 273.4 GiB (7000 users \* 40 MiB / 1024).

The global edge bandwidth calculation is:

| Description                                       | Calculation                         | Quantity        |
| ------------------------------------------------- | ----------------------------------- | --------------- |
| Bandwidth used to send updates                    | 20 updates \* 5 MiB \* 10,000 users | 976.5625 GiB    |
|                                                   |
| Bandwidth included in plan                        |                                     | 100 GiB         |
| Bandwidth included with 7,000 extra updated users | 7,000 \* 40 MiB                     | 273.4375 GiB    |
| **Total**                                         | **976.5625 - 100 - 273.4375**       | **603.125 GiB** |

If the same subscriber sends the 21st update of 5 MiB to the same 10,000 users in the current billing period, they will only pay for any extra bandwidth used.

| Description                                       | Calculation                         | Quantity       |
| ------------------------------------------------- | ----------------------------------- | -------------- |
| Bandwidth used to send updates                    | 21 updates \* 5 MiB \* 10,000 users | 1,025.39 GiB   |
|                                                   |
| Bandwidth included in plan                        |                                     | 100 GiB        |
| Bandwidth included with 7,000 extra updated users | 7,000 \* 40 MiB                     | 273.4375 GiB   |
| **Total**                                         | **1,025.39 - 100 - 273.4375**       | **651.95 GiB** |

This is because Expo only charges for [unique monthly active users](/eas-update/faq/#how-are-monthly-updated-users-counted-for-a-billing-cycle). As a result, the subscriber's bill for extra usage will be:

| Description           | Price           | Quantity   |      Total |
| --------------------- | --------------- | ---------- | ---------: |
| Updated users         | $0.005 per user | 7,000      |        $35 |
| Global edge bandwidth | $0.10 per GiB   | 651.95 GiB |      $65.2 |
| **Total (USD)**       |                 |            | **$100.2** |

If the same subscriber is on a Production plan, they will pay $0 as the Production plan includes 50,000 monthly active users and 1 TiB (1024 GiB). As such, there is no extra bandwidth usage.

## Monitor usage

> **Note**: Billing estimates shown may be delayed by up to 24 hours (one day).

To see the current billing period's usage summary, go to the [Billing](https://expo.dev/settings/billing) and under **Usage**, you will find a summary for both EAS Build and EAS Update usage.

<ContentSpotlight
  alt="Billing usage summary for EAS Build, EAS Update, and EAS Workflows in the EAS dashboard."
  src="/static/images/billing/usage-01.png"
  className="max-w-[400px]"
/>

### EAS Build usage history

To see detailed EAS Build usage for a current or previous billing period:

- Click **Usage** in the navigation menu.
- Under the **EAS Build** section, you will find details on builds count and executed builds based on their platform and resource class.

<ContentSpotlight
  alt="Detailed EAS Build usage in the EAS dashboard."
  src="/static/images/billing/usage-02.png"
  className="max-w-[600px]"
/>

### EAS Update usage history

To see detailed EAS Update usage for a current or previous billing period:

- Click **Usage** in the navigation menu.
- Under the **EAS Update** section, you will find details on updated users and global edge bandwidth details.

<ContentSpotlight
  alt="Detailed EAS Update usage in the EAS dashboard."
  src="/static/images/billing/usage-03.png"
  className="max-w-[600px]"
/>

### Enable notifications for EAS Build usage

You can enable **Plan credit usage** notifications to closely monitor your EAS Build usage. It enables email notifications when 80% and 100% of your plan's EAS Build credit is used.

To enable EAS Build credit usage notification:

- Click **Email notifications** in the navigation menu under your account's settings:
- Under **EAS Build notifications**, click **Subscribe** for **Plan credit usage notifications**.

<ContentSpotlight
  alt="Enabling EAS Build plan credit usage notifications in the EAS dashboard."
  src="/static/images/billing/usage-04.png"
  className="max-w-[720px]"
/>

### How to optimize build usage

You can use [EAS Update](/eas-update/introduction/) and [development builds](/develop/development-builds/introduction/) to test and deploy new code without having to create an entirely new build. This will help you iterate faster and reduce build usage.

For most apps, the JavaScript code changes more frequently than the underlying native code and configuration. If you are building a new build every time for code changes, consider [using EAS Update to take advantage of the different iteration frequency](/eas-update/how-it-works/) between JavaScript and native code. This way, you can ship those changes as an update instead.

When using Continuous Integration (CI)/Continuous Deployment (CD) to build pre-production code, you can reduce unnecessary usage by automating the process of building only when changes are made to the native code. You can create a workflow in your CI/CD using [Expo Fingerprint](https://expo.dev/blog/fingerprint-your-native-runtime) to detect when your native code has changed, and only execute a build if it has changed. Otherwise, publish an update if the native code has not changed.

A development build can run any EAS Update that is compatible with its native runtime. If you are using EAS Update with multiple testing channels, you can reduce the need for creating additional builds by having your testers or test devices use the same development build.

### How to optimize update usage

You can manage certain assets to include or exclude when using EAS Update. This reduces the number of assets uploaded or downloaded from the updates server and the global edge bandwidth used.

To optimize storage and bandwidth usage, you can choose to exclude assets that haven't been modified. For example, images or videos that haven't been changed can be excluded. Excluded assets won't be uploaded to the update server and won't be downloaded by the app. However, it's important to make sure that assets that are not part of an update are included in the native build of the app.

> **Note**: If an app has already downloaded an asset that is also part of a new update, the app will not re-download that asset. This will also not add to your account's bandwidth usage.

You can use `npx expo-updates assets:verify <dir>` to check all required assets are included in the update. For more information, see [Asset selection and exclusion](/eas-update/asset-selection/).
